﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Persistente.Atividade
{
    public class PAtividade
    {
        private DB_FINALCOUNTDOWN _db;
        private SqlConnection _conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_FINALCOUNTDOWN_SQL"].ConnectionString);


        public List<tb_atividades> pegarAtividadesPorEvento(int idEvento)
        {
            var obLstAtividades = new List<tb_atividades>();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obLstAtividades = _db.tb_atividades.Where(q => q.id_evento == idEvento && q.tb_eventos.nr_status == 1).ToList();
            }
            catch (Exception e)
            {
                
                throw e;
            }finally
            {
                _db.Connection.Close();
            }
            return obLstAtividades;
        }

        public bool Salvar(string nmAtividade, int tmEventoAtual, int idEvento)
        {
            var obTbAtividade = new tb_atividades();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obTbAtividade.nm_atividade = nmAtividade;
                obTbAtividade.tm_evento_total = TimeSpan.FromMinutes(tmEventoAtual);
                obTbAtividade.tm_evento_atual = TimeSpan.FromMinutes(0);
                obTbAtividade.id_evento = idEvento;
                obTbAtividade.nr_situacao_contagem = 0;

                _db.AddTotb_atividades(obTbAtividade);
                _db.SaveChanges();
                return true;
            }catch(Exception)
            {
                return false;
            }finally
            {
                _db.Connection.Close();
            }
        }

        public void Remover(int idAtividade)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbAtividade = _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();
                if (obTbAtividade != null)
                {
                    _db.tb_atividades.DeleteObject(obTbAtividade);
                    _db.SaveChanges();
                }

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public tb_atividades pegarAtividadePorId(int idAtividade)
        {
            var obTbAtivadade = new tb_atividades();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obTbAtivadade = _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();
            }
            catch (Exception e)
            {
                
                throw e;
            }finally
            {
                _db.Connection.Close();
            }
            return obTbAtivadade;
        }

        public void Alterar(tb_atividades obTbATividadeNovo)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbAtividadeVelho =
                    _db.tb_atividades.Where(q => q.id_atividade == obTbATividadeNovo.id_atividade).FirstOrDefault();

                obTbAtividadeVelho.nm_atividade = obTbATividadeNovo.nm_atividade;
                obTbAtividadeVelho.tm_evento_total = obTbATividadeNovo.tm_evento_total;

                _db.SaveChanges();

            }
            catch (Exception e)
            {
                
                throw e;
            }finally
            {
                _db.Connection.Close();
            }
        }

        public void pararAtividade(int idAtividade, TimeSpan tsAtual)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbAtividadeVelho =
                    _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();

                obTbAtividadeVelho.tm_evento_atual = tsAtual;
                obTbAtividadeVelho.dt_evento_start = null;

                _db.SaveChanges();

            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public void iniciarAtividade(int idAtividade)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbAtividadeVelho =
                    _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();

                obTbAtividadeVelho.dt_evento_start = DateTime.Now;

                _db.SaveChanges();

            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public void iniciarpararEComecarAtividadesAtividade(int idAtividadeParar, TimeSpan tsPararAtual, int idAtividadeComecar)
        {
            try
            {
                this.pararAtividade(idAtividadeParar, tsPararAtual);
                this.iniciarAtividade(idAtividadeComecar);

            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public int pegarSituacaoContagem(int idAtividade)
        {
            var obTbAtivadade = new tb_atividades();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obTbAtivadade = _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();
            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                _db.Connection.Close();
            }
            return obTbAtivadade.nr_situacao_contagem;
        }

        public void alterarSituacaoContagem(int idAtividade)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbAtividadeVelho =
                    _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();

                obTbAtividadeVelho.nr_situacao_contagem = 1;
                obTbAtividadeVelho.tm_evento_atual = Convert.ToDateTime("00:00:00").TimeOfDay;
                obTbAtividadeVelho.dt_evento_start = DateTime.Now;

                _db.SaveChanges();

            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public void recomecarContagem(int idAtividade)
        {
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                var obTbAtividadeVelho =
                    _db.tb_atividades.Where(q => q.id_atividade == idAtividade).FirstOrDefault();

                obTbAtividadeVelho.nr_situacao_contagem = 0;
                obTbAtividadeVelho.tm_evento_atual = Convert.ToDateTime("00:00:00").TimeOfDay;

                _db.SaveChanges();

            }
            catch (Exception e)
            {

                throw e;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public tb_atividades pegarAtividadeAtivaPorEvento(int idEvento)
        {
            tb_atividades obTbAtividade = new tb_atividades();
            try
            {
                _db = new DB_FINALCOUNTDOWN();
                obTbAtividade = _db.tb_atividades.FirstOrDefault(q => q.id_evento == idEvento && q.dt_evento_start != null);
            }
            catch (Exception e)
            {

                obTbAtividade = null;
            }
            finally
            {
                _db.Connection.Close();
            }
            return obTbAtividade;
        }
    }
}
